package com.boot.project.admin.controller.system;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.boot.project.core.annotation.RefuseResponseResult;
import com.boot.project.core.annotation.ResponseResult;
import com.boot.project.core.enums.log.ParamPosition;
import com.boot.project.core.model.system.criteria.RoleCriteria;
import com.boot.project.core.model.system.dto.RoleAssignDto;
import com.boot.project.core.model.system.dto.RoleSaveDto;
import com.boot.project.core.model.system.entity.Role;
import com.boot.project.module.log.annotation.AccessLog;
import com.boot.project.module.system.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@ResponseResult
@RequestMapping("/sys/role")
public class RoleController {

    @Autowired
    private RoleService roleService;

    /**
     * 分页条件查询
     * @param criteria 查询条件
     * @return
     */
    @GetMapping
    @AccessLog(value = "条件查询角色信息")
    @RefuseResponseResult
    public Page<Role> list(RoleCriteria criteria) {
        return roleService.page(criteria);
    }

    /**
     * 新增角色信息
     * @param roleSaveDto 角色信息
     */
    @PostMapping
    @AccessLog(value = "新增角色信息", position = ParamPosition.BODY)
    public void add(@Valid @RequestBody RoleSaveDto roleSaveDto) {
        roleService.add(roleSaveDto);
    }

    /**
     * 根据id查询角色信息
     * @return
     */
    @GetMapping("/{id}")
    @AccessLog(value = "查询id为[{1}]的用户信息")
    public Role findOne(@PathVariable("id") Long id) {
        return roleService.findOne(id);
    }

    /**
     * 更新角色信息
     * @param roleSaveDto 角色信息
     */
    @PutMapping
    @AccessLog(value = "更新角色信息", position = ParamPosition.BODY)
    public void edit(@Valid @RequestBody RoleSaveDto roleSaveDto) {
        roleService.edit(roleSaveDto);
    }

    /**
     * 批量删除角色信息
     * @param ids 角色id的集合
     */
    @DeleteMapping
    @AccessLog(value = "批量删除角色信息")
    public void delete(@RequestParam("ids") List<Long> ids) {
        roleService.delete(ids);
    }

    /**
     * 查询所有角色
     * @return
     */
    @GetMapping("/all")
    @AccessLog(value = "查询所有角色")
    public List<Role> findAll() {
        return roleService.findAll();
    }

    /**
     * 给角色分配权限
     * @param roleAssignDto 角色分配权限的实体
     */
    @PutMapping("/assign")
    @AccessLog(value = "给角色分配权限", position = ParamPosition.BODY)
    public void assignPermission(@Valid @RequestBody RoleAssignDto roleAssignDto) {
        roleService.assignPermission(roleAssignDto);
    }
}
